package com.javaex.book.service;

import java.util.List;

import com.javaex.book.pojo.Cart;
import com.javaex.book.pojo.Order;
import com.javaex.book.pojo.OrderItem;
import com.javaex.book.utils.ReturnResult;

public interface OrderService {

	/**
	 * 生成订单
	 * @param cart 购物车
	 * @param userId 用户id
	 * @return 订单号
	 */
	String createOrder(Cart cart, Integer userId);
	
	/**
	 * 查询我的订单数量
	 * @param userId 用户id
	 * @return 我的订单数量
	 */
	Integer countMyOrders(Integer userId);
	
	/**
	 * 查询我的订单
	 * @param userId 用户id
	 * @param start 分页查询起始位置
	 * @param pageSize 页容量
	 * @return 我的所有订单
	 */
	List<Order> showMyOrders(Integer userId, Integer start, Integer pageSize);
	
	/**
	 * 查询全部订单数量
	 * @return 订单数量
	 */
	Integer countAllOrders();
	
	/**
	 * 查询所有订单
	 * @param userId 用户id
	 * @param start 分页查询起始位置
	 * @param pageSize 页容量
	 * @return 所有订单
	 */
	List<Order> showAllOrders(Integer start, Integer pageSize);
	
	/**
	 * 签收订单
	 * @param orderId 订单id
	 * @return 签收结果
	 */
	ReturnResult receiverOrder(String orderId);
	
	/**
	 * 查询订单的订单项数量
	 * @param orderId 订单id
	 * @return 当前订单的订单项数量
	 */
	Integer countOrderItems(String orderId);
	
	/**
	 * 查看订单详情
	 * @param orderId 订单id
	 * @param start 查询起始位置
	 * @param pageSize 页容量
	 * @return 订单详情
	 */
	List<OrderItem> showOrderDetail(String orderId, Integer start, Integer pageSize);
	
	/**
	 * 删除订单 
	 * @param orderId 订单id
	 * @return 删除结果
	 */
	ReturnResult deleteOrder(String orderId);
		
	/**
	 * 发货
	 * 	1. 根据订单id查询出订单
	 * 	2. 判断订单是否未发货，如果已发货或已签收，返回提示信息
	 * 	3. 如果未发货，将订单的状态改为已发货
	 * 
	 * @param orderId 订单id
	 * @return 处理结果
	 */
	ReturnResult sendOrder(String orderId);
}
